// 用户相关的处理模块
const express = require('express');
const router = express.Router();

const {
	login,
	register,
	findUsername,
	getFriendMessage
} = require("../db/usersdb.js");

const {
	getFriendIdsByEmailId
} = require("../db/friendsdb.js");

const {
	isUserOnline,
	addUser,
	hintOnlineState
} = require("../db/onlineUsers.js");
const {
	DataRls,
	OnlineUser
} = require("../config/class.js")

const {
	getChineseName,
	getEnglishName
} = require("../config/getRandom.js")


/* GET users listing. */
router.get('/', function (req, res, next) {
	res.send('respond with a resource');
});

// 登录逻辑
router.post('/login', async function (req, res, next) {
	// 获取账户密码对比结果
	try {
		// 先使用user数据库的登录方法
		let result = await login(req.body)

		if (!result.result) {
			res.json(result);
		} else {
			// 访问当前用户的id值
			let id = String(result.data._id);

			// 判断该用户是否已经登录
			if (isUserOnline(id)) {
				// 账户重复登录流程
				res.json(new DataRls("账户重复登录", "", false));
			} else {
				// 登录成功流程

				// 将用户信息保存到session中
				// 这个是用户持久保存登录信息的关键
				req.session.user = result.data;

				// 将用户放在在线用户表中进行维护
				addUser(id, new OnlineUser({
					_id: id,
				}))


				// 1-获取好友列表
				let friendlist = await getFriendIdsByEmailId(req.session.user.friendId);
				// 2-根据好友列表，通知在线好友用户，该用户已上线
				hintOnlineState(friendlist.data, req.session.user);

				// 发送登录结果
				res.json(result.getMessage());
			}
		}
	} catch (error) {
		console.log("登录错误", error);
		// 发送错误信息
		res.status(400).json(error);
	}
});

// 注册逻辑
router.post('/register', async function (req, res, next) {
	// 获取账户密码对比结果
	try {
		let result = await register(req.body)
		// 发送登录结果
		res.json(result.getMessage());
	} catch (e) {
		console.log("注册错误", e);
		// 发送错误信息
		res.status(400).json(e);
	}
});

// 重新获取用户登录结果的方法
router.get('/getState', function (req, res, next) {
	// 通过session值是否存在，判断用户是否登录
	if (req.session.user) {
		// 如果用户已登录，将鉴权结果和数据一起发送给前端
		res.json(new DataRls("该用户已登录", req.session.user, true).getMessage())
	} else {
		// 如果用户未登录，返回对象类型，向前端说明鉴权结果
		res.json(new DataRls("该连接用户未登录", "权限受限", false));
	}
});

// 获取用户名是否已被使用的方法
router.get('/getRepeatUsername', async function (req, res, next) {
	let { username } = req.query;

	let rls = await findUsername(username)

	if (rls) {
		res.send("ok");
	} else {
		res.send("no");
	}
});


// 获取用户好友列表
router.post('/getFriendMessage', async function (req, res, next) {
	let {
		findID
	} = req.body;
	// 通过函数处理好友列表
	let rls = await getFriendMessage(findID);
	// 将处理完成的好友列表，返回给前端
	res.json(rls);
});

// 获取群聊列表
router.post('/getGroupMessage', async function (req, res, next) {
	
});

module.exports = router;